package com.main.common.interfaces;

import com.main.common.configs.InterceptorConfig;
import com.main.common.enums.LimitType;
import com.main.common.interceptors.AccessLimitInterceptor;
import org.springframework.context.annotation.Import;

import java.lang.annotation.*;

/**
 * 接口限流注解
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
//@Import({InterceptorConfig.class})
//@Inherited
public @interface AccessLimit {
    // 资源名称，用于描述接口功能
    String name() default "";
    // 资源 key
    String key() default "";
    // key prefix
    String prefix() default "";
    // 时间的，单位秒
    int period() default 60;
    // 限制访问次数
    int count() default 1;
    // 限制类型
    LimitType limitType() default LimitType.IP;
    /**
     * 使用实例：
     * 测试限流注解，下面配置说明该接口 60秒内最多只能访问 10次，保存到redis的键名为 limit_test，
     * 即 prefix + "_" + key，也可以根据 IP 来限流，需指定limitType = LimitType.IP
     */
//    @Limit(key = "test", period = 60, count = 10, name = "resource", prefix = "limit")
//    @GetMapping("/test")
//    public int testLimiter() {
//        return ATOMIC_INTEGER.incrementAndGet();
//    }
}